package net.qiqbframework.modelling.command;

import net.qiqbframework.commandhandling.CommandMessage;

/**
 * 聚合根对象执行命令监控。
 * 在命令执行完后进行记录
 */
public interface AggregateHandlingMonitor {
    /**
     * 执行命令之前执行
     *
     * @param commandMessage            命令
     * @param beforeHandleAggregateRoot 命令执行之前的聚合根（刚刚加载的）。如果是新增，此参数为空
     * @param <T>                       聚会根类型
     */
    default <T> void beforeHandle(CommandMessage<?> commandMessage, T beforeHandleAggregateRoot) {

    }

    /**
     * 执行命令后，提交命令时触发。
     *
     * @param commandMessage            命令
     * @param beforeHandleAggregateRoot 命令执行之前的聚合根（刚刚加载的）。如果是新增，此参数为空
     * @param afterHandleAggregateRoot  命令执行之后的聚合根快照。
     * @param <T>                       聚会根类型
     */
    default <T> void afterCommit(CommandMessage<?> commandMessage, T beforeHandleAggregateRoot, T afterHandleAggregateRoot) {

    }


}
